import pandas as pd
import os
# 规则库
rules = [
    {"if": "SDO < 7.0",
     "then": "水温较高，溶解氧减少，可能不适合冷水性水生生物。建议采取措施降低水温或增加水体的氧气供给，如增加水体的流动性、在水体周围种植遮荫植物、定期监测水温和溶解氧。"},
    {"if": "7.0 <= SDO <= 9.0", "then": "水温适中，溶解氧正常，适合大部分水生生物。建议维持现状，并继续监测，确保水质稳定。"},
    {"if": "SDO > 9.0",
     "then": "水温较低，溶解氧充足，适合冷水性水生生物。建议继续维持现状，但要注意防止水温过低，影响其他水生生物。"},
    {"if": "DOSP < 80",
     "then": "水体缺氧，可能对水生生物有害。建议采取措施增加溶解氧，如使用曝气设备、减少有机污染物的输入、定期监测溶解氧水平。"},
    {"if": "80 <= DOSP <= 120", "then": "溶解氧正常，水体健康。建议维持现状，继续监测水质，确保其稳定性。"},
    {"if": "DOSP > 120",
     "then": "水体可能过度富氧，可能导致藻类过度繁殖。建议采取措施控制藻类生长，如减少营养物质的输入、使用适量的除藻剂或生物控制方法、定期监测水质。"},
    {"if": "TSI < 40", "then": "水体寡营养，适合饮用水源地。建议维持现状，继续保护水源，避免污染。"},
    {"if": "40 <= TSI < 50", "then": "水体中营养，适合一般生态系统。建议维持现状，同时监测水质，确保其不进一步恶化。"},
    {"if": "50 <= TSI < 70",
     "then": "水体富营养，可能需要监测和管理。建议采取措施减少营养物质输入，如控制农业和生活污水的排放、增加水体的流动性和自净能力、使用植物吸收水中的营养物质。"},
    {"if": "TSI >= 70",
     "then": "水体超富营养，需要采取治理措施。建议立即采取措施减少营养物质输入，并进行生态恢复，如控制和减少点源和非点源污染、种植水生植物或使用生物技术净化水体、增加水体的流动性和自净能力。"},
    {"if": "SI < 0.2",
     "then": "生物多样性低，生态系统可能不稳定。建议增加生物多样性，如引入多样的水生植物和动物种类、改善水质、控制入侵物种。"},
    {"if": "0.2 <= SI <= 0.8",
     "then": "生物多样性适中，生态系统较稳定。建议维持现状，继续保护和监测，确保生态系统的稳定性。"},
    {"if": "SI > 0.8", "then": "生物多样性高，生态系统稳定。建议维持现状，继续保护和监测，确保生态系统的健康。"},
    {"if": "PI < 0.3",
     "then": "物种均匀度低，某些物种可能过度占优势。建议采取措施增加物种均匀度，如控制优势物种的数量、增加其他物种的生境和资源供给、引入多样的生物种类。"},
    {"if": "0.3 <= PI <= 0.7",
     "then": "物种均匀度适中，生态系统较为均衡。建议维持现状，继续保护和监测，确保生态系统的均衡性。"},
    {"if": "PI > 0.7", "then": "物种均匀度高，生态系统非常均衡。建议维持现状，继续保护和监测，确保生态系统的健康和均衡。"}
]

class expert_ExpertSystem:
    def __init__(self, rules, file_path, index_file='column_index.txt'):
        self.rules = rules
        self.file_path = file_path
        self.index_file = index_file
        self.df = pd.read_excel(file_path)
        self.num_columns = len(self.df.columns)
        self.col_index = self.load_column_index()

    def load_column_index(self):
        if os.path.exists(self.index_file):
            with open(self.index_file, 'r') as f:
                return int(f.read().strip())
        return 1

    def save_column_index(self, col_index):
        with open(self.index_file, 'w') as f:
            f.write(str(col_index))

    def read_columns(self, col_index):
        if col_index >= self.num_columns:
            print("列索引超出范围，重置为第二列")
            col_index = 1
        data = self.df.set_index(self.df.columns[0])[self.df.columns[col_index]].to_dict()
        return data, col_index

    def evaluate_rules(self, data):
        conditions = []
        suggestions = []
        for rule in self.rules:
            condition = rule["if"]
            action = rule["then"]
            if eval(condition, {}, data):
                first_sentence = action.split('。')[0]  # 提取第一句话
                remaining_action = action[len(first_sentence) + 1:]  # 去掉第一句话后的内容
                conditions.append(first_sentence)
                suggestions.append(remaining_action)
        return conditions, suggestions

    def analyze(self):
        data, col_index = self.read_columns(self.col_index)
        if data:
            conditions, suggestions = self.evaluate_rules(data)
            self.col_index += 1
            self.save_column_index(self.col_index)
            return conditions, suggestions
        return [], []



